home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Wonky Flux Batch 2019 02
/
Wonky_Flux_Batch_2019-02.zip
/
Wonky Flux Batch 2019-02
/
089 - Misc Stuff - PD.dsk
/
DRIVER.S
< prev
next >
Wrap
Text File
|
2019-02-17
|
6KB
|
222 lines
********************************
* *
* "CALL -APPLE PRINTER DRIVER" *
* *
* A printer driver for the *
* Apple ][ game paddle port *
* *
* by *
* Randy Wiggington *
* Steve Wozniak *
* Darrell Aldrich *
* Ron Aldrich *
* Dave Garson *
* Val Golding *
* *
* with finishing touches by *
* Glen Bredon *
* *
* ...in other words, everyone *
* had their finger in the pie! *
* *
* Written for Integral Data *
* printers, but easily modify- *
* able to many serial printers *
* *
* Flash and inverse characters *
* are converted to normal *
* before being output. *
* *
********************************
********************************
* *
* PINOUTS, GAME I/O TO PRINTER *
* *
* GAME I/O PIN PRINTER PIN *
* 15 (AN0) 3 IDS (RCVD) *
* 8 (GND) 7 IDS (SIGGND) *
* 4 (SW2) 5 IP225 (CTS) *
* 4 (SW2) 20 IP440 (DRDY) *
* *
********************************
CH = $24
CSWL = $36
RECON = $3EA
AMP = $3F5
MARK = $C058
SPACE = $C059
SW2 = $C063
WAIT = $FCA8
CROUT = $FD8E
COUT1 = $FDF0
* AFTER BRUNNING THIS, THE
* PRINTER CAN BE SELECTED FROM
* APPLESOFT BY TYPING "&".
* (FROM INTEGER, CALL 1013 OR
* CALL 768.)
* FROM BIG MAC, TYPE "USER" IN
* EDITOR MODE.
ORG $2F0 ;TO PUT MAIN PROGRAM AT $300
LDA #$4C
STA AMP
LDA #INIT
STA AMP+1
LDA #>INIT
STA AMP+2
RTS
INIT LDA CH ;"&"-VECTOR POINTS HERE
STA COLCNT
LDY CSWL+1
LDA #OUTPUT
STA CSWL
LDA #>OUTPUT
CMP CSWL+1 ;ENTRY ALREADY MADE? IF SO,
BEQ NODOS ;DON'T ACCIDENTALLY RECONNECT
STA CSWL+1
CPY #>COUT1
BEQ NODOS
JMP RECON
NODOS RTS
OUTPUT CMP #$80 ;NORMAL CHR?
BGE OUTPUT1 ;BRANCH IF SO
AND #$3F ;CONVERT FLASH AND INVERSE
ADC #$20 ;TO NORMAL (CARRY IS CLEAR).
EOR #%11100000
OUTPUT1 PHA
OUTPUT2 BIT SW2 ;IF NO HANDSHAKE: LDA #$48
BPL OUTPUT2 ; AND JSR WAIT.
LDA COLCNT ;IF COLUMN COUNT IS LESS
CMP CH ;THAN HORIZONTAL CURSOR
PLA ;THEN SEND A SPACE.
PHA
BCS TESTCTRL
LDA #" "
TESTCTRL BIT RTS1 ;TEST FOR CONTROL CHR
BEQ PRNTIT
INC COLCNT
BNE PRNTIT
DEC COLCNT ;DON'T "INC" TO 0
PRNTIT JSR DOCHAR
PLA
PHA
BCC OUTPUT2 ;CAUGHT UP WITH CH?
EOR #$8D ;TEST FOR CR
BNE FINISH ;NOT CR, WIND UP
STA COLCNT ;YES CR, ZERO COL COUNT
STA CH ;IN CASE OF NOVID MODE
BIT LINFEED ;LINEFEED REQUESTED?
BPL DELAY ;BRANCH IF NOT
LDA #$8A ;SEND ONE
JSR OUTPUT1
DELAY LDA #$58
JSR WAIT
FINISH PLA
PHA
BIT VIDEO ;VIDEO REQUESTED?
BMI NOVID ;BRANCH IF NOT
JSR COUT1 ;SEND TO SCREEN
LDA #0 ;TO FORCE FALL THROUGH TO CHKBND
NOVID BIT RTS1 ;CONTROL CHR?
BEQ CHKBND ;DON'T INC CH IF CONTROL CHR
INC CH ;UPDATE CH IF NOVID
CHKBND LDA COLCNT ;CHECK WINDOW
CMP #$FF ;255 WIDTH?
BEQ RETURN ;IF SO, DON'T TEST WNDWDTH
SEC
SBC WNDWDTH
BCS CR ;DO A CR IF AT RIGHT MARGIN
BIT LISTFLG ;PROXIMITY CHECK REQUESTED?
BPL RETURN ;BRANCH IF NOT
SBC #$F7 ;ARE WE WITHIN 7 CHRS OF END?
BCC RETURN ;BRANCH IF NOT
PLA ;GET LAST CHR
PHA
EOR #" " ;WAS IT A SPACE
BNE RETURN ;BRANCH IF NOT
CR JSR CROUT ;YES, DO CR
BIT LISTFLG ;"BASIC" LISTING OPTION?
BPL RETURN ;BRANCH IF NOT
LDA #6 ;YES, TAB IN 6 SPACES
STA CH
RETURN PLA
RTS1 RTS
DOCHAR STY YSAVE
PHP ;SAVE CARRY STATUS
LDY #11 ;BIT COUNT
CLC
NXTBIT PHA
BCS MARKOUT
LDA SPACE
BCC OV
MARKOUT LDA MARK
OV LDA BAUD
DELAY1 PHA
LDA #$20
DELAY2 LSR
BCC DELAY2
PLA
SBC #1
BNE DELAY1
PLA
ROR
DEY
BNE NXTBIT
LDY YSAVE
PLP
RTS
YSAVE DS 1 ;SCRATCH
* WNDWDTH: POKE 970,DESIRED WIDTH
* [DEFAULT = 80 COLUMNS]
* POKE 970,255 WILL DEFEAT
* MARGIN CHECK AND CAN BE USED
* FOR SENDING GRAPHICS DATA TO
* A GRAPHICS PRINTER LIKE THE
* PAPER TIGER.
WNDWDTH DFB 80
* THE FOLLOWING 3 FLAGS ARE
* TESTED ONLY FOR SIGN:
* LISTFLG: POKE 971,255 FOR A
* BASIC-LIKE LISTING. FOR
* LISTING A BASIC PROGRAM, ALSO
* POKE 33,33 AND SELECT VIDEO.
* [DEFAULT = NOT DONE]
* VIDEO: POKE 972,255 TO DEFEAT
* PRINTING TO THE SCREEN.
* [DEFAULT = VIDEO ON]
* LINFEED: POKE 973,0 TO
* DISABLE A LINEFEED AFTER
* A CARRIAGE RETURN.
* [DEFAULT = LINEFEED]
LISTFLG DFB 0
VIDEO DFB 0
LINFEED DFB 255
* BAUD: POKE 974,BAUDNUM:
* BAUDNUM = 2 FOR 9600 BAUD
* BAUDNUM = 20 FOR 1200 BAUD
* BAUDNUM = 215 FOR 110 BAUD
* [DEFAULT = 1200 BAUD]
BAUD DFB 20
COLCNT DS 1 ;SCRATCH